﻿using System;
using System.Collections.Specialized;
using System.Net;
using System.Text;
using System.Xml;

namespace Meteo.Desktop
{
    public class Meteo
    {
        private string server;
        private XmlDocument doc;

        public Meteo()
        {
            server = "http://www.google.com/ig/api?weather=Santiago";
            doc = new XmlDocument();
        }

        private bool conectToServer()
        {

            using (WebClient client = new WebClient())
            {
                client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
                client.Headers[HttpRequestHeader.AcceptLanguage] = "es";

                byte[] responseArray;

                try
                {
                    responseArray = client.UploadValues(server, new NameValueCollection());
                }
                catch (Exception)
                {
                    // Se comentó la siguiente línea para evitar
                    // Que aparezca una ventana de notificación
                    // Cada vez que no se pueda contactar el servidor
                    //MessageBox.Show("No es posible contactar con el servidor");
                    return false;
                }

                string values = Encoding.UTF8.GetString(responseArray);
                doc.LoadXml(values);
                return true;
            }
        }

        public MeteoData getData()
        {
            if (!this.conectToServer())
            {
                // Se retorna nulo cuando no fue posible conectarse al server
                return null;
            }

            XmlElement current = doc.LastChild["weather"]["current_conditions"];

            //MeteoData? dt = new MeteoData();
            //MeteoData data = dt.GetValueOrDefault();


            if (current == null) return null;

            MeteoData data = new MeteoData();
            try
            {
                data.Wind = current["wind_condition"].GetAttribute("data");
            }
            catch { }
            try
            {
                data.Current = current["condition"].GetAttribute("data");
            }
            catch { }
            try
            {
                data.Temperature = Int32.Parse(current["temp_c"].GetAttribute("data"));
            }
            catch { }
            try
            {
                data.Humidity = current["humidity"].GetAttribute("data");
            }
            catch { }
            try
            {
                data.Icon = current["icon"].GetAttribute("data");
            }
            catch { }

            return data;
        }

        private string getDay(string d)
        {
            switch (d)
            {
                case "lun": return "Lunes";
                case "mar": return "Martes";
                case "mié": return "Miércoles";
                case "jue": return "Jueves";
                case "vie": return "Viernes";
                case "sáb": return "Sábado";
                case "dom": return "Domingo";
                default: return d;
            }
        }
    }
}
